shell expansions
brace expansion: {}内のシーケンス等を展開
シーケンスの展開
code:sh
echo {a..c} # a b c
echo {0..2}a # 0a 1a 2a
カンマ区切りの展開
code:sh
echo {a,b,1} # a b 1
echo x{b,c,d}y # xby, xcy, xdy
tilde expansion: ~をホームディレクトリ名に展開
code:sh
echo ~/tmp # /home/<user>/tmp
parameter expansion: $以降、または${ }内を展開
code:sh
x=1
echo $x # 1
echo $xyen #
echo ${x}yen # 1yen
要素数の取り出し: #
code:sh
a=1234
echo ${#a} # 4
値の切り出し
code:sh
var=20201011_fujisan_cosmos.jpg
# 先頭から最短一致までを切り捨て: <param>#<word>
echo ${var#*_} # fujisan_cosmos.jpg
# 先頭から最長一致までを切り捨て: <param>##<word>
echo ${var##*_} # cosmos.jpg
# 末尾から最短一致までを切り捨て: <param>%<word>
echo ${var%_*} # 20201011_fujisan
# 末尾から最長一致までを切り捨て: <param>%%<word>
echo ${var%%_*} # 20201011
command substitution: \` \`、または$( )内のコマンドを展開
code:sh
echo echo hoge # hoge
echo echo echo hoge # echo hoge (入れ子不可)
echo $(echo $(echo hoge)) # hoge (入れ子可)
arithmatic expantion: $(( ))内の数式を展開
code:sh
echo $((1+1)) # 2
echo 1+1 # 1+1
echo $(( $(date +%s) / (60*60*24*365) )) # 50
word splitting
シェル変数IFSに設定した文字を区切りとして、" "で囲まれていない引数とかを分割して読み取る
code:sh
echo 1 2 $((3+4)) # 1 2 7
pathname expansion 2
マッチするファイル名が存在する場合に、*, ?, []を展開する
code:sh
# *: 任意の文字列にマッチする
ls ~/Pictures/*.png
# ?: 任意の1文字にマッチする
ls ~/Pictures/image?.png # image0.pngとかにマッチ
# ...: ...に含まれる文字にマッチ
ls ~/Pictures/ab*.png # aまたはbで始まるpngファイルにマッチ
wildcardとも?yosider.icon
出典
1. シェルの展開(EXPANSION)を学ぶ
2. https://bash.cyberciti.biz/guide/Path_name_expansion
3. Shell Expansions (Bash Reference Manual)
bash.icon